package com.yehui.mvc;

import com.yehui.config.SpringConfig;
import org.springframework.stereotype.Service;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * 只要写了，等价于SpringMvc的DispactherServlet
 * 1.Tomcat已启动就加载
 *    1）创建容器、指定了配置类(所有的ioc,aop等spring的功能就OK)
 *    2)注册一个
 *    Servlet;DispactherServlet
 *    3)以后所有的的请求都交给了DispactherServlet
 *  效果访问Tomcat部署的这个Web引用下的所有请求都会被DispactherServlet处理
 *  DispactherServlet就会进入强大的基于注解的mvc处理流程（@GetMapping）
 *
 */
@Service
public class MyWebApplicationInitializer /**implements WebApplicationInitializer**/ {


	public void onStartup(ServletContext servletContext) throws ServletException {
		// Load Spring web application configuration
		//自己创建ioc容器
		AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
		//注册主配置类(注解版springmvc配置替换以前的springmvc配置文件)
		context.register(SpringConfig.class);
		//以上截止ioc容器没有启动
		// Create and register the DispatcherServlet
		//自己创建DispatcherServlet对象，并保存了ioc容器
		//配置了DispatcherServlet，利用Servlet的初始化机制
		DispatcherServlet servlet = new DispatcherServlet(context);
		ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
		registration.setLoadOnStartup(1);
		//指定好映射
		registration.addMapping("/");//映射路径
	}
}
